/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package View;

/**
 *
 * @author Chronos
 */
import Model.Contact;
import Model.TableDynamique;
import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import javax.swing.AbstractAction;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Window extends JFrame {


    private TableDynamique modele = new TableDynamique();
    private JTable tableau;
    // Constructeur de fenêtre principale //
    public Window() {
            super();
            
            setTitle("MyContacts");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            tableau = new JTable(modele);

            getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
            // Permet de trier les colonnes //
            tableau.setAutoCreateRowSorter(true);
            
            JPanel boutons = new JPanel();

            boutons.add(new JButton(new AddAction()));
            boutons.add(new JButton(new RemoveAction()));
            boutons.add(new JButton(new SaveAction()));
            boutons.add(new JButton(new BrowserAction()));
            boutons.add(new JButton(new MailAction()));

            getContentPane().add(boutons, BorderLayout.SOUTH);

            pack();
        }


// La fonction AddAction ajoute un nouveau contact vierge que l'utilisateur doit remplir //
    private class AddAction extends AbstractAction {
        private AddAction() {
            super("Ajouter");
        }

        public void actionPerformed(ActionEvent e) {
            Contact cont = new Contact("","","","","","","","","","","","","","");
            modele.addContact(cont);
        }
    }
// La fonction MailAction lance l'opérateur par défaut de mail du système //
    private class MailAction extends AbstractAction {
        private MailAction() {
            super("Lancer le logiciel d'email");
        }
        public void actionPerformed(ActionEvent e) {
            try {
                Desktop.getDesktop().mail();
            } catch (IOException exc) {
                Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, exc);
            }

        }
    }
// La fonction BrowserAction lance le navigateur par défaut du système et ouvre
//    l'url du contact sélectionné
    private class BrowserAction extends AbstractAction {
        private BrowserAction() {
            super("Lancer l'homepage du contact");
        }
        public void actionPerformed(ActionEvent e) {
            int[] selection = tableau.getSelectedRows();
            try {
                try {
                    Desktop.getDesktop().browse(new URI((String) modele.getValueAt(selection[0], 8)));                    
                } catch (IOException ex) {
                    Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (URISyntaxException ex) {
                Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
// La fonction SaveAction sauvegarde depuis le tableau vers le fichier contacts.txt
//    toutes les données actuelles du tableau
    private class SaveAction extends AbstractAction {
        private SaveAction(){
            super("Sauvegarder");
        }

        public void actionPerformed(ActionEvent e) {

           // Quand l'utilisateur change directement des données d'un contact ou
           // qu'il supprime un contact il doit sauvegarder pour que les
           // données soient enregistrées dans le fichier 
           File new_name = new File("contacts.txt");
           new_name.delete();
           String cell;

            try{
                String nomFichier = "contacts.txt";
                FileWriter fw = new FileWriter(nomFichier);

                for (int i=0;i<modele.getRowCount();i++)
                {
                    for (int j=0;j<modele.getColumnCount();j++)
                    {
                        cell=modele.getValueAt(i, j)+";";
                        fw.write(cell);
                    }
                    fw.write("\n");
                }

                fw.close();

           }
           catch (FileNotFoundException t){
               System.out.println("Le fichier est introuvable !");
           }
           catch (IOException t) {
               System.out.println( t );
           }



        }
    }
// La fonction RemoveAction supprime le contact séléctionné de la table //
    private class RemoveAction extends AbstractAction {
        private RemoveAction() {
            super("Supprimer");
        }

        public void actionPerformed(ActionEvent e) {
           int[] selection = tableau.getSelectedRows();          

           for(int i = selection.length - 1; i >= 0; i--){
                modele.removeContact(selection[i]);
            }
        }
    }
       

}



